package model.invocatedMethods;

import constants.Constants;
import factory.ExecutorFactory;
import model.subject.Sensor;

/**
 * Implémentation de l'interface Runnable utilisée pour la modification automatique de la valeur du capteur.
 */
public class SensorModifierRunnable implements Runnable {

	private Sensor sensor;
	
	private boolean activated;
	
	public SensorModifierRunnable(Sensor sensor) {
		this.sensor = sensor;
		
		activated = true;
	}
	
	@Override
	public void run() {
		while(activated) {	// Tant que la modification automatique est activée on choisi une valeur aléatoire dans l'intervalle de valeur du capteur
			Double randomValue = Math.random() * (Constants.SENSOR_MAX_VALUE - Constants.SENSOR_MIN_VALUE ) + Constants.SENSOR_MIN_VALUE;
			int newValue = randomValue.intValue();
			sensor.setValue(newValue);
			randomValue = Math.random() * Constants.THREAD_SLEEP_MAX_DURATION;
			
			try {
				Thread.sleep(randomValue.longValue());
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void activate(){
		if(!activated) {
			activated = true;
			ExecutorFactory.getInstance().execute(this);
		}
	}
	
	public void desactivate() {
		activated = false;
	}
	
}
